package edu.nwpu.dao;

import edu.nwpu.pojo.Food;
import io.swagger.models.auth.In;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface FoodMapper {

    /**
     * 根据菜品Id查找菜品(包括已删除的菜品)
     *
     * @param foodId: 菜品ID
     *
     * @return edu.nwpu.pojo.Food 查询结果
     */
    Food selectFoodByFoodId(@Param("id") Long foodId);

    /**
     * 根据菜品Id查找菜品的价格(包括已删除的菜品)
     *
     * @param foodId: 菜品ID
     *
     * @return edu.nwpu.pojo.Food 查询结果
     */
    Double selectFoodPriceByFoodId(@Param("id") Long foodId);

    /**
     * 模糊查询菜品的名称(不包括已删除的菜品)
     *
     * @param name: 查询内容
     *
     * @return java.util.List<edu.nwpu.pojo.Food> 结果列表
     */
    List<Food> selectFoodsByLikeName(@Param("name") String name);

    /**
     * 查询指定偏移量和数量的菜品(不包括已删除的菜品)
     * 用于分页查询，没有查询结果时返回空列表
     *
     * @param offset: 偏移量
     * @param limit: 最大数量
     *
     * @return java.util.List<edu.nwpu.pojo.Food> 结果列表
     */
    List<Food> selectFoodListPage(@Param("offset") Integer offset, @Param("limit") Integer limit);

    /**
     * 查询给定菜品类型Id的菜品列表(不包括已删除的菜品)
     *
     * @param typeId: 菜品类型Id
     *
     * @return java.util.List<edu.nwpu.pojo.Food> 查询结果列表
     */
    List<Food> selectFoodsByTypeId(@Param("id") Long typeId);

    /**
     * 更新菜品（不更新状态码）
     *
     * @param food:
     *
     * @return int
     */
    @Deprecated
    int updateFood(Food food);

    /**
     * 更新菜品的状态码
     *
     * @param foodId:
     * @param statusCode: 新状态码
     *
     * @return int
     */
    @Deprecated
    int updateFoodStatusByFoodId(@Param("id") Long foodId, @Param("statusCode") Integer statusCode);

    @Deprecated
    int addFood(Food food);

    @Deprecated
    List<Food> getAllFoods();

    /**
     * 精确查找指定名称的菜品
     *
     * @param name: 菜品名称
     *
     * @return edu.nwpu.pojo.Food
     */
    @Deprecated
    Food getFoodByName(@Param("name") String name);

    @Deprecated
    int deleteFoodById(@Param("id") Long id);

    @Deprecated
    int deleteFoodByName(String name);

    /**
     * 添加中间表food-type记录
     * @param typeId
     * @param foodId
     * @return
     */
    @Deprecated
    int addFoodAndFoodType(@Param("typeId") Long typeId,@Param("foodId") Long foodId);

    /**
     * 删除中间表food-type记录
     * @param typeId
     * @param foodId
     * @return
     */
    @Deprecated
    int deleteFoodAndType(@Param("typeId") Long typeId,@Param("foodId") Long foodId);

    /**
     * 根据typeId删除中间表food-type中所有属于该菜品类别下的记录
     * @param typeId
     * @return
     */
    @Deprecated
    int deleteFoodAndTypeByTypeId(@Param("typeId") Long typeId);

}
